package tetris;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;

/**
 *
 * @author Fermin Jimenez & Javier Sigüenza
 */
public class Tetris extends Applet implements KeyListener, Runnable {

    public int arraytetris[][] = new int[10][20];
    Pieza pactual = new PiezaZ(80, 80, this);
    Image imagenDB;
    Graphics gDB;
    Thread hiloabajo;

    public void init() {
        setBackground(Color.GRAY);
        addKeyListener(this);
        hiloabajo = new Thread(this);
        hiloabajo.start();
    }

    public void paint(Graphics g) {

        getAppletContext().showStatus("Fermin Jimenez & Javier Sigüenza");
        g.setColor(Color.black);
        g.fillRect(50, 50, 300, 600);//crea tablero tetris
        g.fillRect(375, 50, 100, 100);//crea tablero siguiente pieza (pequeño derecha)
        pactual.pintar(g);
        for (int i = 0; i < 20; i++) {
            for (int j = 0; j < 10; j++) {
                if (arraytetris[j][i] == 2) {
                    g.setColor(Color.pink);
                    g.fillRect(j * 30 + 50, i * 30 + 50, 30, 30);
                }
                if (arraytetris[j][i] == 3) {
                    g.setColor(Color.yellow);
                    g.fillRect(j * 30 + 50, i * 30 + 50, 30, 30);
                }
                if (arraytetris[j][i] == 4) {
                    g.setColor(Color.blue);
                    g.fillRect(j * 30 + 50, i * 30 + 50, 30, 30);
                }
            }
        }

        //Inicio - Cuadrícula
        g.setColor(Color.red);
        //Verticales
        for (int i = 1; i < 10; i++) {
            g.drawLine(50 + (i * 30), 50, 50 + (i * 30), 650);
        }
        //Horizontales
        for (int i = 1; i < 20; i++) {
            g.drawLine(50, 50 + (i * 30), 350, 50 + (i * 30));
        }
        //Fin - Cuadrícula

    }

    public void destroy() {

    }

    public void update(Graphics g) {

        if (imagenDB == null) {

            imagenDB = createImage(getWidth(), getHeight());
            gDB = imagenDB.getGraphics();
        }

        gDB.setColor(getBackground());
        gDB.fillRect(0, 0, getWidth(), getHeight());

        gDB.setColor(getForeground());
        paint(gDB);

        g.drawImage(imagenDB, 0, 0, this);

    }

    public void keyPressed(KeyEvent e) {
        int c = e.getKeyCode();
        //System.out.println(c);

        if (c == 37) {//izquierda
            pactual.izquierda();
        }
        if (c == 39) {//derecha
            pactual.derecha();
        }
        if (c == 40) {
            pactual.abajo();
        }
        repaint();

    }

    @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void keyReleased(KeyEvent e) {

    }

    @Override
    public void run() {
        while (true) {
            pactual.abajo();
            repaint();
            try {
                Thread.sleep(2000);
            } catch (InterruptedException ex) {
            }
        }
    }

    public void piezaAleatoria() {
        int aleatorio = randomNumber(1, 4);
        switch(aleatorio){
            case 1:
                pactual = new PiezaCuadradito(80, 80, this);
            break;
            case 2:
                pactual = new PiezaL(80, 110, this);
            break;
            case 3:
                pactual = new PiezaZ(80, 80, this);
            break;
                
                
            default:
                pactual = new PiezaZ(80, 80, this);
                break;
                
        }

    }

    public int randomNumber(int min, int max) {
        return min + (new Random()).nextInt(max - min);
    }

}
